]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
search: Define SearchResultInterface and implement valid results with it
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Wed, 16 Oct 2019 10:38:48 +0000 (12:38 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Wed, 16 Oct 2019 15:26:13 +0000 (15:26 +0000)
Since all the search result classes are now GObject classes, we can enforce
the methods we want to have in there (just activate() for now) using an
interface, to make sure they are implementing what we require and to easily
group all the classes that can be used as search results, even though they
are not extending SearchResult.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559

js/ui/appDisplay.js
js/ui/search.js

index 6edf03c406fef573d0cb1beb3c42b5a5ab1eaf5b..6ffe58b6c46e76f8ca5a28006c9cf1efe73adeef 100644 (file)
@@ -2035,6 +2035,7 @@ var AppFolderPopup = GObject.registerClass({
 
 var AppIcon = GObject.registerClass({
     GTypeName: 'AppDisplay_AppIcon',
+    Implements: [Search.SearchResultInterface],
     Signals: {
         'menu-state-changed': { param_types: [GObject.TYPE_BOOLEAN] },
         'sync-tooltip': {},
index 7e7645a3db218a248a9d072ada1da7d803374e6e..169ceab8a39fde20b9d95af652ed370b4c0fd8ae 100644 (file)
@@ -1,5 +1,5 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-/* exported SearchResultsView */
+/* exported SearchResultsView, SearchResultInterface */
 
 const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
 
@@ -32,8 +32,17 @@ class MaxWidthBox extends St.BoxLayout {
     }
 });
 
-var SearchResult = GObject.registerClass(
-class SearchResult extends St.Button {
+var SearchResultInterface = GObject.registerClass({
+    Requires: [Clutter.Actor],
+}, class SearchResultInterface extends GObject.Interface {
+    activate() {
+        throw new GObject.NotImplementedError('activate in %s'.format(this.constructor.name));
+    }
+});
+
+var SearchResult = GObject.registerClass({
+    Implements: [SearchResultInterface]
+}, class SearchResult extends St.Button {
     _init(provider, metaInfo, resultsView) {
         this.provider = provider;
         this.metaInfo = metaInfo;
@@ -242,6 +251,8 @@ var SearchResultsBase = GObject.registerClass({
                 metasNeeded.forEach((resultId, i) => {
                     let meta = metas[i];
                     let display = this._createResultDisplay(meta);
+                    if (!(display instanceof SearchResultInterface))
+                        throw new Error(`${display} is not a valid search result`);
                     display.connect('key-focus-in', this._keyFocusIn.bind(this));
                     this._resultDisplays[resultId] = display;
                 });